home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Graphics / Utility / Sparkle 1.6 / README 1st < prev    next >
Text File  |  1993-08-04  |  30KB  |  535 lines

  1. Sparkle: A new mac MPEG player.
  2. -------------------------------
  3. Documents for version 1.5
  4. This document looks best in 9 point monaco.
  5.  
  6. This document contains the following sections:
  7. INTRODUCTION
  8. ABOUT MPEG
  9. ABOUT CONVERSION TO QUICKTIME
  10. WHY DOESN'T SPARKLE DO....
  11. SMALL THINGS YOU MIGHT NOT HAVE NOTICED
  12. THE FUTURE
  13. HOW CAN YOU HELP IMPROVE SPARKLE?
  14.  
  15. ------------------------------------------------------------------------------
  16. INTRODUCTION
  17.  
  18. Hi there, friendly users. This is release 1.6 of my mac MPEG player.
  19. Version 1.0 of this code was based on the Berkeley MPEG unix code.
  20. (Anyone who wants to play with the Berkeley code can get it from 
  21. toe.cs.berkeley.edu in pub/multimedia/mpeg.) It was released as soon as 
  22. it was usable. This release is a major rewrite in which I have tried to 
  23. address many of the problems with version 1.0.
  24.  
  25. I have completely rewritten about a third of the MPEG code, while 
  26. modifying another third. In particular the memory management, YUV 
  27. conversion, picture scheduling/ordering and error-handling have been 
  28. completely rewritten. These rewrites have allowed much more efficient 
  29. memory usage (a pure I-frame MPEG plays in about a sixth as much memory 
  30. as earlier, while a full IPB-frame MPEG plays in about half the memory.) 
  31. The new code also runs at 2 to 2.5 times as fast as the old code.
  32.  
  33. The user interface remains the same as in 1.0. It is ugly and 
  34. unsatisfactory, but it works and is not going to change for some time as 
  35. there are more important things I need to add to the code. However a 
  36. large number of little tweaks were added to the code. You will notice 
  37. that windows are updated more smoothly, multiple screen support is 
  38. better, the movie controller always changes its display to match the 
  39. state of the MPEG (playing, paused and such). Things like that.
  40. Some of the changes I have made may seem gratuitous, or even for the 
  41. worse. Please be patient about them. These changes are in anticipation of 
  42. what I will add to the code, even though they seem like a step backward.
  43.  
  44. Please read all of this document before playing with the program. While 
  45. actually using the program is pretty simple, there are a few things you 
  46. should be aware of. Many of you may not care when I waffle on about 
  47. technical details. However I would ask all programmer readers (especially 
  48. people knowledgable about QuickTime, and especially Apple [and 
  49. ex-Apple :-( employees] to look at the tech sections and help me out with 
  50. comments and suggestions. Each time someone gives me a pointer on how to 
  51. do something it cuts a week or more off the release date of the next 
  52. version of Sparkle. 
  53.  
  54. Features:
  55. •    Standard mac interface with menus and windows.
  56. •    Uses the QuickTime movie controller to control the MPEG viewing.
  57. •    MultiFinder friendly, with good backgrounding behavior.
  58. •    Saves MPEGs to QuickTime movies.
  59. •    Can open multiple files at once.
  60. •    Free.
  61.  
  62. To run it needs at least:
  63. •    System 7.
  64. •    QuickTime 1.5
  65. •    A 68020 or better.
  66. •    600K to play one 160x120 MPEG---to open more or large MPEGs increase the
  67.     partition.
  68.  
  69. This program works fine, with good handling of errors, on my SE/30, but 
  70. that's the only machine I have to test it. If you find a bug that is not 
  71. caused by the various things listed below, please mail me with as many 
  72. details as possible, both about your machine and about what the  program 
  73. was last doing before it died on you.
  74.  
  75. I don't think there's much to say on the use of this program---you pretty 
  76. much run it like any other mac program. There is a section in this 
  77. document on tips that may not be obvious. When opening files, you can 
  78. choose to show all files, or only files with a .mpg suffix. If you choose 
  79. the "show all files" option and open some random file, don't be surprised 
  80. when you are told that that is not a valid MPEG file. If you set the 
  81. option to change file types, the file type of the MPEG file you are 
  82. changing will be changed to a Sparkle file, which will give it a nice 
  83. icon and allow you to open the file by double-clicking on it. The Finder 
  84. takes a bit of time to realise that you have changed the type of a file, 
  85. so the icon will not change right away. It will change when you open and 
  86. close the window, or reboot or stuff like that.
  87.  
  88. I have tested this program extensively under low-memory conditions when 
  89. it opens files and plays them. It should never crash under those 
  90. conditions. I have NOT done estensive testing of low-memory usage when 
  91. saving to QuickTime. So don't stress that too hard. In 600K you can 
  92. easily open, play and save to QT a 120x160 I-frame MPEG. In 1500K you can 
  93. open, play and ave to QT a 352x240 IBP-frame MPEG. Now in 1600K you can 
  94. open both a 352x240 and 120x160. You may even fit in two 120x160s. But I 
  95. can't promise that you'll be able to save to QT. The saving to QT may 
  96. cause a machine crash if everything goes wrong at once. I will some time 
  97. do a full trace through saving to QT like I did for opening files and 
  98. catch every possible low-memory condition I see.
  99.  
  100. Disk errors in various forms (bad sectors reading an MPEG file, no disk 
  101. space writing an QuickTime file, etc) will not crash, but the system will 
  102. put up an error alert and not handle the error very well (for example you 
  103. won't be given a chance to destroy old files to free up space on a disk). 
  104. Decent recovery from disk errors is on the list of things to do.
  105.  
  106. ------------------------------------------------------------------------------
  107. ABOUT MPEG
  108.  
  109. MPEG is an international standard for video compression. It compresses 
  110. frames at two levels. Firstly frames are compressed internally, and 
  111. secondly frame differences are compressed rather than transmitting full 
  112. frames. 
  113. To understand MPEG one should first understand JPEG. MPEG uses the same 
  114. ideas as JPEG for much of its compression, and suffers from the same 
  115. limitations. 
  116. JPEG compression begins by changing an image's color space from RGB 
  117. planes to YUV planes, where Y is the luminance (brightness of the image) 
  118. and U and V store color information about the image. Half the color 
  119. resolution in the horizontal and vertical planes is dropped, because the 
  120. eye is less sensitive to color than to brightness. These YUV planes are 
  121. then divided into 8 by 8 blocks of pixels. The 64 coefficients in this 8 
  122. by 8 block are fourier transformed concentrating the energy of the image 
  123. in a few coefficients at low frequencies. The high frequency terms of the 
  124. fourier transform can be discarded as the eye is not sensitive to them. 
  125. The resultant fourier transform coefficients are then encoded using a 
  126. variable length coding scheme (basically Huffman coding) so that 
  127. frequently occuring patterns of coefficients are transmitted in few bits 
  128. and rare patterns transmitted in many bits.
  129.  
  130. MPEG goes beyond this by adding support for inter-frame compression. This 
  131. compression works by realizing that most video consists of foreground 
  132. objects moving over a largely static background. Thus rather than 
  133. transmit the foreground and background pictures over and over again, what 
  134. is transmitted is the motion of the foreground objects. Note that this is 
  135. different from the way QuickTime does interframe compression. What 
  136. QuickTime does is just to subtract the two images from each other and 
  137. compress the resultant image (which is hopefully largely blank space.)
  138. The MPEG scheme gives much better compression, but is much harder to 
  139. program. It is essentially a pattern recognition problem, looking at a 
  140. set of frames and deciding what pixels in the frame correspond to moving 
  141. objects---the sort of thing humans are very good at and computers very 
  142. bad at. For this reason, a complete MPEG compressor is complex and very 
  143. slow.
  144.  
  145. MPEG movies consist of three types of frames. I-frames are like JPEG 
  146. images and are compressed by themselves. P-frames are compressed based on 
  147. motion relative to a previous frame. B-frames are compressed based on 
  148. motion relative to both a previous frame AND a future frame. How do you 
  149. know what the future frame is? Well the MPEG data is not stored in the 
  150. same order as it is displayed. You have to decode future frames before 
  151. the B-frames on which they depend, then buffer the future frame 
  152. somewhere. This is why MPEG players need rather more memory than 
  153. QuickTime players.
  154. An MPEG movie can consist of only I-frames. This will be far from 
  155. optimally compressed, but is much easier to encode because the pattern 
  156. recognition is not needed. Such a movie is pretty much what you would get 
  157. if you made a QuickTime movie and used the JPEG codec as the compression 
  158. option. Because the I-frame movie is so much easier to calculate, it is 
  159. much more common. Sparkle checks if a movie uses only I-frames and if so 
  160. reduces its memory requirements since such movies do not need complex 
  161. buffering. In the PC world, many people talk about XING type MPEGs which 
  162. are pure I-frame MPEGs. These are produced by XING hardware on PCs and 
  163. played back using the XING MPEG player.
  164.  
  165. One problem with the MPEG standard is that many vendors seem to feel 
  166. which parts of it they support are optional. XING, for example, often 
  167. does not ends its MPEGs properly. It does not start frame numbering 
  168. properly, and does not correct frame numbering after MPEGs are edited.
  169. GC technologies produces MPEGs that have the frames essentially random 
  170. numbered, and has garbage frames at the start of its MPEGs.
  171. Wherever possible I have tried to adapt my code to common pathologies in 
  172. MPEG encoders. 
  173. I have also built in powerful yet computationally cheap 
  174. error-detection and recovery. For example a recent MPEG posted to usenet 
  175. drew widespread complaints because some of the uuencoded text was garbled 
  176. and the resultant MPEG crashed pretty much every decoder out there. But 
  177. Sparkle noticed the error and went on quite happily. Sparkle has also 
  178. proved quite robust in the face of MPEGs I have deliberately corrupted.
  179. If you come across any MPEG file that causes Sparkle to crash or produce 
  180. garbage, I WANT TO KNOW ABOUT IT. With a copy of the file, I can trace 
  181. through Sparkle, find just what causes the crash, and make Sparkle even 
  182. more robust.
  183.  
  184. For more details on MPEG, read the MPEG FAQ on USENET. It is posted once 
  185. a week to the picture groups and to news.answers.
  186.  
  187. ------------------------------------------------------------------------------
  188. ABOUT CONVERSION TO QUICKTIME
  189.  
  190. The following are notes I've made on conversion to QuickTime. I have  
  191. investigated this issue extensively, but not exhaustively. If someone has 
  192. comments on the subject---more extensive notes than I have, corrections, 
  193. whatever, please tell me.
  194.  
  195. All times I give are on my SE/30 with a 32-bit screen. People should 
  196. extrapolate to their machines---I guess LC IIs are about half as 
  197. fast and Centris/Quadras three to six times as fast.
  198.  
  199. The useful codecs are video, cinepak (used to be compact video) and jpeg. 
  200. JPEG compression at normal quality gives files of very good quality and not 
  201. much larger than pure I-frame MPEGs. A 120x160 image can play back at about 
  202. 4fps. Translated to an 040 and you get a useful frame rate. However JPEG 
  203. has a major problem in that when it decodes to a 32bit screen, it draws 
  204. directly to the screen, not to an offscreen Gworld unlike other codecs. 
  205. This produces movies with obvious tearing artifacts. When fast-dithering is 
  206. used to draw to other screen depths, it works fine. I don't understand why 
  207. this problem with 32 bit screens should be the case, but I have told Apple 
  208. about this problem and maybe it'll be fixed in a later release of 
  209. QuickTime. Meanwhile write to Apple and complain---they are holding back a 
  210. useful capability. 
  211.  
  212. With the video and cinepak compressors, it is very important to check the 
  213. key-frame rate checkbox. Key-frames are like MPEG I-frames. They are 
  214. compresed standalone and do not depend on other frames. The other frames 
  215. produced by the movie codecs depend on previous frames. Setting the 
  216. key-frame rate guarantees that at least that rate of key-frames (one 
  217. frame in used. for example) will be used. Checking the key-frame rate 
  218. checkbox allows the movie to use intra-frame compression (ie not just 
  219. key-frames) and gives movies half as small as they would otherwise be.
  220. The lower you set the key frame rate to (this means a larger number in 
  221. the QuickTime saving options dialog box) , the smaller you movie will be.
  222. For example a 72K MPEG (48 frames, 120x160, pure I-frame) became a 290K 
  223. movie without keyframes, a 160K movie with a key-frame rate of 1 in 8, 
  224. and a 138K movie with a key-frame rate of 1 in 96. 
  225. The price you pay for a low key-frame rate is that the movie has more 
  226. difficulty when playing backwards, or when randomly jumping around. I 
  227. don't find it a problem and usually use a key-frame rate of about 1 in 
  228. 100, but try for yourself to see what things are like.
  229. Video gives better quality results when a higher key-frame rate is used.
  230. Strangely cinepak appeared to give lower quality results (as well as a 
  231. larger movie) when more key-frame were used. 
  232. I'll have to investigate this further---I may have become confused when I 
  233. was making the measurements. Anyone want to confirm or deny this?
  234. (For comparison, this same movie became a 90K JPEG movie.)
  235.  
  236. I find video and cinepak give much the same file sizes at the same 
  237. (around normal) quality setting. The cinepak file is consistently a 
  238. little larger, but not enough to matter. The video file is consistently 
  239. lower quality for the same size as the cinepak file. However the video 
  240. low quality artifacts (blocks of solid color) I find less psychologically 
  241. irritating that the cinpeak low quality artifacts (general fuzzing of 
  242. borders like everything is drawn in crayon and watercolor). 
  243. However cinepak has the advantage of playing back much faster than video. 
  244. For a 120x160 image on my 32bit screen, I can get smooth playback with 
  245. cinepak at 24fps. Video can do smooth playback up to about 16 fps.
  246.  
  247. Fast dithering seems to be a good job for speed (at the cost of quality). 
  248. Unlike earlier versions of QuickTime, with 1.6.1 I found the same speed 
  249. of playback (ie same degree of skipping frames or not) at every screen 
  250. depth but 2 bit depth.
  251.  
  252. Cinepak can support a largish MPEG to QuickTime movie (352x240) at 6fps 
  253. on my mac, but no faster.
  254.  
  255. Compression using cinepak is SLOW SLOW SLOW. A 120x160 frame takes about 
  256. 10 seconds to compress. A 352x240 frame takes about a minute. In this 
  257. time your mac is stuck---it looks like it has crashed. Don't start saving 
  258. to cinepak QuickTime unless you are prepared to walk away from your mac 
  259. and not touch it until it's done.
  260. QuickTime 1.5 did not include anyway to do this compression in small 
  261. chunks so that it would run nicely in the background. I received word 
  262. today that QuickTime 1.6 does have this capability, so once I get the 
  263. relevant techincal documents and read them, I will add this ability.
  264.  
  265. See the WHY DOESN"T SPARKLE DO... section for information about MPEG 
  266. frame rates and their relationship to QuickTime frame rates.
  267.  
  268. ------------------------------------------------------------------------------
  269. WHY DOESN"T SPARKLE DO...
  270.  
  271. •    Why doesn't Sparkle tell you what rate an MPEG should play at so you 
  272.     can use that rate for the QuickTime movie?
  273. In my opinion the single stupidest thing the MPEG committee did was the 
  274. way they defined frame rates. Rather than allowing an MPEG file to be 
  275. whatever rate is wanted, like a QuickTime file, only one of eight fixed 
  276. rates is allowed. The minimum of these eight rates is 24fps. This is 
  277. clearly insane as many people don't have the hardware or the need to 
  278. display at this rate. Many MPEGs are being produced at 16 or 12fps. These
  279. MPEGs set the frame rate to a bogus value cause they can't do anything 
  280. else. In my experience, most 120x160 MPEGs work best at about 16fps.
  281.  
  282. Now some MPEGs do give a display rate that is valid. However these are 
  283. usually large MPEGs, and their frame rate is 30fps. So unless you have a 
  284. quadra with extra hardware quicktime just won't be able to play the movie 
  285. at that rate anyway. 
  286.  
  287. Because of these, for now I don't bother to point out the frame rate of 
  288. the MPEG. This will certainly change as I improve the program. Even if 
  289. you don't set that frame rate to the QT frame rate, it's interesting to 
  290. know.
  291.  
  292. Also note that some MPEGs are converted video of what was originally a 
  293. movie. Now movies run at 24fps, but video is 30 fps. So every five frames 
  294. a movie frame is doubled giving an extra video frame. This works fine 
  295. when playing at 30 fps but gives a strange jerkiness when playing at 6fps 
  296. or so. A future Sperkle enhancement will seek out these duplicate frames 
  297. and eleminate them, but for now you are stuck with them.
  298.  
  299. I know it is a pain to creat a movie at one frame rate and find it sucks, 
  300. so you have to recreate it at a second frame rate. It would be nice just 
  301. to use the movie you have but change the frame rate from say 16fps to 12 
  302. fps. This will be added to a later version of Sparkle.
  303.  
  304. •    Why doesn't Sparkle read .gl, .dl and .fli files?
  305. One reason is that those file formats are awful. They give these dinky 
  306. low contrast horribly dithered images no-one would want to look at, and 
  307. they usually only have about 10 frames. Maybe, years from now, I'll add 
  308. those conversions, but they're about as low a priority as you get.
  309.  
  310. •    Why doesn't Sparkle convert QuickTime to MPEG?
  311. It will. That will be the major new feature of version 2.0. I have 
  312. recently released code from Stanford that does this. The word from the 
  313. DOS ports of it is that it is slow as molasses, that it makes cinepak 
  314. look like greased lightning. Anyway I will see what I can do about adding 
  315. this to my code and getting it fast enough to be usable. This is a large 
  316. task, so I can't give a date. Maybe you'll see a working (though not 
  317. speed-optimized) program two or three months from now.
  318.  
  319. •    What about audio?
  320. MPEG has audio compression as well as video compression. I do not really 
  321. understand how the audio compression works. That is, I have the MPEG 
  322. standard that explains the bit patterns used and such, but I don't 
  323. understand the overall ideas behind the encoding. I don't think I can do 
  324. a good job in terms of high speed, good quality, low memory usage and 
  325. such, unless I have such an understanding.
  326. Does anyone out there have any references on how the MPEG psycho-acoustic 
  327. coding works? Technical journals, books, elementary or advanced 
  328. treatments. I don't care what you suggest---anything is better than my 
  329. present zero knowledge.
  330.  
  331. •    What about Windows for Video?
  332. I would be nice to support .AVI files. But right now I know nothing about 
  333. .AVI beyond the fact that it exists. Again any info anyone has is 
  334. appreciated. Until I know how .AVI works, how it fits into the windows 
  335. environment etc, I can't even tell you if it's practical for Sparkle to 
  336. try to support .AVI, let alone start the necessary coding.
  337.  
  338. •    Why don't you write an MPEG codec?
  339. It is not yet clear to me that an MPEG codec has any particular use.
  340. As far as the MPEG algorithm goes, my code is not yet fast enough to give 
  341. real video, even on quadras. For a 120x160 movie I get 1 fps on my SE/30. 
  342. While I hope to get at least twice that as I continue to revise the code, 
  343. I don't think I can get much beyond it. The best I could ever get if I 
  344. wrote in pure assembly is 4 fps (the JPEG codec rate) which isn't really 
  345. good enough. 
  346. Next the MPEG file structure is rather different from the QuickTime file 
  347. structure in the way that different pieces of data are tagged and 
  348. synchronised. Things would not be like the JPEG codec where a program can 
  349. slap a short header onto a JPEG file, feed it to the JPEG codec and have 
  350. a usable picture. The program would still have to know a lot about the 
  351. MPEG file structure to use the codec, so the whole point of the codec as 
  352. being usable by programs that don't know the compression algorithm 
  353. details is lost.
  354. Also I suspect the way MPEG uses forward image prediction in B-frames 
  355. will cause QuickTime problems both with buffer allocation (where will the 
  356. future predictive frames be stored) and in random access.
  357.  
  358. So for now I think a separate MPEG<->QT program is most useful. Of course 
  359. when Sparkle is maxed out as an application (and when QuickTime has 
  360. evolved more) I may reconsider the issue, but it won't happen soon.
  361.  
  362. •    Why is Sparkle so slow?
  363. Partially because it's doing lots of work. Partially because parts of the 
  364. Berkeley code still need to be rewritten by me. 
  365.  
  366. There are now two main bottlenecks. Parsing and the IDCT (inverse 
  367. discrete cosine transform). Parsing should speed up a bit when I 
  368. replace the present (really simple) disk buffering subsystem with a much 
  369. more sophisticated random-access buffering scheme that eliminates the 
  370. redundancies that plague the present parsing.
  371. The IDCT code is in C. Writing it in assembly would give a fair speed 
  372. boost, but is a fair bit of work. Can anyone (an Apple employee) tell me 
  373. how to access the IDCT code in the JPEG codec. If I could call that code, 
  374. I could easily give Sparkle a speed boost.
  375. Additionally MPEG defines some really finicky details about how to 
  376. reconstruct the image once the data has been parsed. I'm not sure we need 
  377. to be that finciky, and I suspect I can drop some of the processing 
  378. that's done at negligible cost in image quality. Anyway I have to 
  379. experiment with that.
  380.  
  381. Right now I find Sparkle fast enough to be usable, so don't expect 
  382. further speed increases until after new features (MPEG encoding and 
  383. sound) are added.
  384.  
  385. •    Why does the display of frame numbers sometimes jump backwards and 
  386.     forwards?
  387. This display has a somewhat schizoid purpose. One role is to tell the 
  388. viewer what the frame number of the current frame is. A second role is to 
  389. provide visual feedback that something is happening when a frame is being 
  390. decompressed. Now when B-frames are decompressed, sometimes two frames 
  391. have to be decompressed before anything is drawn on the screen (the 
  392. future frame must be decompressed, and then the B-frame). But if I make 
  393. the text display climb through two numbers not one, it looks like random 
  394. frames are being lost. So what you have now is a bareable kludge that 
  395. serves both masters. I have an idea for how to deal with this problem 
  396. better, by not trying to display these two different pieces of 
  397. information in the same way, but those will wait until new functionality 
  398. is added to the code.
  399.  
  400. •    Why does the MPEG sometimes stop before the highest frame number?
  401. This can happen for two reasons. One is that some MPEGs (like those 
  402. produced by GC technologies) have two garbage frames at the start of the 
  403. file that cannot be decoded and are skipped by Sparkle. Right now Sparkle 
  404. isn't clever enough when it counts the nmuber of frames to notice that 
  405. these frames are garbage and should not be included in the count of total 
  406. frames. In future this smartness will be added.
  407. A second reason is that if a frame is corrupt, it may be displayed as an 
  408. image with some junk, or it may be skipped entirely because Sparkle just 
  409. can't deal with whatever error corrupted the file.
  410.  
  411. •    Will I make the source available? 
  412. Yes, at some point. Right now it is horrible, being as it is a hybrid of 
  413. my code and the Berkeley code. I have very fixed ideas about C/C++ style, 
  414. which are very different from the ideas of Berkeley. I doubt anyone could 
  415. extract anything useful from the present mess. 
  416. However every two weeks or so, once my latest experimentation and ideas 
  417. are resolved, I go through a few files and clean them up, fix up things I 
  418. commented as quick kludges, etc etc. So the code is evolving to a 
  419. publicly acceptable form.
  420. I am also passing on to Berkeley my ideas for speeding up the code and 
  421. making it more robust to corrupt data, so with luck MPEG players on other 
  422. platforms will also improve with time.
  423.  
  424. ------------------------------------------------------------------------------
  425. SMALL THINGS YOU MIGHT NOT HAVE NOTICED
  426.  
  427. The movie controller is not as functional as a real movie controller. 
  428. This is because I have not yet replaced the Berkeley disk buffering 
  429. sub-system with my smart, random-access sub-system. 
  430. So the movie controller gives you play, pause, forward one frame and 
  431. rewind, that's all. Rewind is given, like on a normal movie controller, 
  432. by clicking on the backward-one-frame button with the option key down.
  433. You can also rewind once the end of a movie is reached by clicking the 
  434. play button twice.
  435.  
  436. The visual clue that the movie is being converted to QuickTime is that 
  437. the movie controller loses its steppers. This is not a particularly 
  438. obvious fact and will at some point be changed. For now it works once you 
  439. realize this fact.
  440.  
  441. When a movie is being converted to QT, you can either stop the conversion 
  442. or pause it. To stop the conversion, use command-S (or the equivalent 
  443. menu option.) This will save the movie using the frames created so far.
  444. To pause the conversion use command-P, or the equivalent menu option, or 
  445. click on the movie controller's play/pause button. The quicktime 
  446. conversion will stop until you start that movie playing again. This is 
  447. occasionally useful if you want to pause a cinepak conversion to do a 
  448. short job on your mac.
  449.  
  450. If you are partway through a movie and save to QT, the movie will be 
  451. rewound to the beginning for you. You do not need to be at the start of a 
  452. movie to save to QT.
  453.  
  454. You can set the temporal quality options when saving to QuickTime 
  455. separately from the spatial quality options. If you need to do this, hold 
  456. down the option key while using the quality slider, and it will become a 
  457. temporal quality slider. (This may be a new feature of QT1.6, and may not 
  458. work in QT1.5.)
  459.  
  460. The code runs fastest on a 24bit screen because it then does not need to 
  461. dither the image to the display. The dithering adds a 15% or so slowdown 
  462. to the code. So if your screen has a 24bit mode, use it.
  463. My screen does not do 16 bits. I have some ideas about things to do that 
  464. would improve playback on a 16bit screen, but cannot test them. If some 
  465. programmer type out there with experience in QuickDraw, QuickTime, 
  466. dithering, Gworlds, that sort of thing wants to contact me, I can mention 
  467. my ideas for how to support a 16bit screen better and try out sample code.
  468.  
  469. ------------------------------------------------------------------------------
  470. THE FUTURE
  471.  
  472. The basic outline for now is
  473.     2.0 Opens and play QT movies. Converts them to MPEG.
  474.     2.5 Cleaned up faster, smaller version of 2.0.
  475.     3.0 Handles sound.
  476.     3.5 Cleaned up faster, smaller version of 3.0.
  477. While adding these large additions I'll fix small things as I go, and as 
  478. I have time. I don't see the user interface improving much for some 
  479. time---more important things need my time.
  480.  
  481. In mid August I will be going to New Zealand and looking for a job. 
  482. Depending on how job hunting goes, and what job I find, the time I can 
  483. devote to this code may shrink, but I'll do what I can when I can.
  484. Anyone want to hire me? I also have UNIX/X-windows programming and system 
  485. management experience, and a MS in physics.
  486.  
  487. ------------------------------------------------------------------------------
  488. HOW CAN YOU HELP IMPROVE SPARKLE?
  489.  
  490. •    Any info on psycho-acoustic encoding?
  491. •    Any info on MicroSoft Video for Windows?
  492. •    Assembly code for IDCT, or a way to access the JPEG codec's IDCT code.
  493. •    Why is QuickTime so slow about creating text track movies? If you have 
  494.     code that creates text track movies fast, please show it to me.
  495. •    Any bug reports.
  496. •    Any ideas you have or suggestions. Your suggestions may go onto the 
  497.     list of things to do (currently two pages of single line items) but will 
  498.     probably be acted upon at some point. People have suggested several 
  499.     things to me I would not have thought of myself, so I do want your 
  500.     feedback.
  501. •    Anything on the QT16 CD ROM beyond the technote at ftp.apple.com.
  502.     I have full docs for QT15, but already I've learned of one aspect of 1.6 
  503.     that I coul make good use of. There may be others.
  504. •    Tell me if you have a graphics card/screen that does both 24 bits and 
  505.     16 bits, and if you know some QuickDraw and QuickTime concepts. I need 
  506.     some feedback on ideas I have for 16 bit screens.
  507. •    How can I immediately tell the Finder that I have changed the 
  508.     attributes of a file (ie changed file type, added a custom icon, 
  509.     whatever)?
  510. ------------------------------------------------------------------------------
  511. THANKS
  512.  
  513.     Many people all over the internet have helped me write this code.
  514.     Thanks to the people at Berkeley. Even though I'm gradually destroying 
  515. their code as I replace it with my own, they helped get this project 
  516. started.
  517.     Thanks to the people at Stanford whose code I hope to start using real 
  518. soon now.
  519.     Thanks to various usenet personalities who answered mac programming 
  520. questions, mailed me quicktime header files and such. Special thanks to 
  521. ldo in New Zealand, and Jon W{tte in Sweden, and bryanw, keeper of the 
  522. MPEG FAQ, who mailed me about the Stanford MPEG encoder.
  523.     A special individual thank you goes to DS (he didn't want me to give his 
  524. name but he knows who he is.) DS mailed me a CD ROM and ten floppies of 
  525. information about QuickTime components after I complained that Apple was 
  526. not making this information easily available. Already that knowledge has 
  527. helped this version of Sparkle handle update events much better---no more 
  528. flashes of images. Once I add random access to the code, his help will 
  529. really come into its own.
  530.     Thanks to Apple for making the greatest computers in the world, and to 
  531. Symantec for creating such a great programming environment.
  532.  
  533. Maynard Handley 
  534. maynard@helios.tn.cornell.edu
  535. Aug 04 1993